package nl.hanze.security.sampler;

import com.google.gson.Gson;
import nl.hanze.security.AESCodec;
import nl.hanze.security.domain.NatuurlijkPersoon;

public class AESCodecTester {
  
    public static void main(String[] args) {

        // make new codecs.
        // Two constructors: one with key, other without key.
        // In the latter case, use setKey(String key) before using encode or decode else exception is thrown

        AESCodec a1=new AESCodec("quA$$_pl0L8L%gW5");
        AESCodec a2=new AESCodec();
        AESCodec a3=new AESCodec("moeilijkesleutel");
        
        NatuurlijkPersoon persoon = new NatuurlijkPersoon();
        persoon.setAchternaam("Jansen");
        persoon.setBsn(234567);
        persoon.setGeslacht(new String("M").charAt(0));
        persoon.setInitialen("J.");
        persoon.setNummer(13);
        persoon.setPostcode("2345BB");
        persoon.setStraatnaam("Kalverstraat");
        persoon.setWoonplaats("Amsterdam");
        
        Gson gson = new Gson();
        String json = gson.toJson(persoon);
        
        // OK
        String response = "c9322f8adb2da66884a74a7de5207930bcb7bab7779546702eb7fc0507bbfd0a33131f11b74eab9a52854caa24b6aefb981e39e3ac7327720ff896b0fb8c99f66644cc8d8ff13bb76209fa10ecb6cc69958059f5d871e36f286ab85004f8d0bb";
        // NOT OK
        String response2 = "58b01eeb10f3d2ab9cb4e4d2176ac590d88e82240e43c70ed76256ede8a9a694906e26d8f29a7b32f610f127e81ead9339a2fd248faade10a5a1df50680b5df3e385f996f918dbd6851731eeb09799f9b6222a929ec8da1650fde66ca28763a8";

        try {
                String s = a3.encode(json);
                System.out.println(s);
                
                String t = a3.decode(response);
                System.out.println(t);
                
                String t2 = a3.decode(response2);
                System.out.println(t2);
//            // encode message in CBC mode
//            String s=a1.encode("EEN GECODEERD BERICHT");
//            // write hex coded string
//            System.out.println(s);
//            // decode message
//            String t=a1.decode(s);
//            // write decoded string
//            System.out.println(t);
//
//            // encode same message with different key
//            a2.setKey("0L_*saGk^)RkF5q");
//            s=a2.encode("NOG EEN GECODEERD BERICHT");
//            // write hex coded string
//            System.out.println(s);
//            // decode message
//            t=a2.decode(s);
//            // write decoded string
//            System.out.println(t);
//
//            // encoding with empty key is possible
//            a1.setKey("");
//            s=a1.encode("WEDEROM EEN GECODEERD BERICHT");
//            // write hex coded string
//            System.out.println(s);
//            // decode message
//            t=a1.decode(s);
//            // write decoded string
//            System.out.println(t);
//
//            // and encoding an empty message
//            s=a1.encode("");
//            // write hex coded string
//            System.out.println(s);
//            // decode message
//            t=a1.decode(s);
//            // write decoded string
//            System.out.println(t);
//
//            // finally a hash error is thrown if hash of message is not OK
//            s=a1.encode("");
//            // write hex coded string
//            System.out.println(s);
//            // mess with message -> replace all f in e
//            s=s.replace('f','e');
//            // decode message
//            t=a1.decode(s);
//            // write decoded string
//            System.out.println(t);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}